package com.thx.common.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * 深度复制，序列化方式，支持对象的深度复制.
 *
 * @author : calonlan
 */
public class DeepCopyUtil {

  /**
   * 深度 copy 一个新对象出来.
   *
   * @param src 待 Copy 的对象
   * @param <T> 对象的类型
   * @return 深度 copy 后的新对象
   * @throws IOException io异常
   * @throws ClassNotFoundException 类名错误
   */
  public static <T> T deepCopy(T src) throws IOException, ClassNotFoundException {

    ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
    ObjectOutputStream out = new ObjectOutputStream(byteOut);
    out.writeObject(src);

    ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
    ObjectInputStream in = new ObjectInputStream(byteIn);
    @SuppressWarnings("unchecked")
    T dest = (T) in.readObject();
    return dest;
  }

}
